package com.xiaolin.security.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

/**
 * @ClassName LoginSecurityConfig
 * @Description TODO
 * @Detail 自定义一些安全配置
 * @Author MyPC
 * @Date 2020/10/8
 * @Version 1.0
 */
@Configuration
public class LoginSecurityConfig extends WebSecurityConfigurerAdapter {
    /**
     * 重写configure方法
     * @param http
     * @throws Exception
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.formLogin()                    //  定义当需要用户登录时候，转到的登录页面。
                .loginPage("/login")           // 设置跳转到登录页面的接口\
                .successForwardUrl("/index")   // 登录成功请求的接口
                .and()
                .authorizeRequests()        // 定义哪些URL需要被保护、哪些不需要被保护
                .antMatchers("/login").permitAll()     // 设置所有人都可以访问登录页面
                //.antMatchers("/").permitAll()   // 设置所有人都可以访问首页
                //.antMatchers("/view/admin").hasRole("admin")   // 有admin的人可以访问该路径,区分大小写，可以直接在方法使用注解控制
                //.antMatchers("/view/super").hasRole("super")  // 有super的人可以访问该路径,区分大小写，可以直接在方法使用注解控制
                .antMatchers("/admin/**").access("hasRole('ADMIN') and hasRole('DBA')")  // 配置拥有ADMIN和DBA才可以访问任何以“/db /”开头的 URL
                .anyRequest()               // 任何请求,登录后可以访问
                .authenticated()            // 必须授权才能访问
                .and()
                .csrf().disable().   // 关闭csrf防护
                logout().logoutUrl("/logout2").logoutUrl("/index");  //用户注销，默认是/logout，也可以自定义
    }

}
